package services

import (
	"errors"
	"fmt"
	"go-GameTimer-X/app/models"
	"go-GameTimer-X/utils"
)

// Login 用户登录
func Login(username string, password string) (string, error) {
	// 这里应该从数据库中获取用户信息
	// 这里只是示例，实际应用中需要替换为真实的数据库查询
	storedUser := models.GinUser{
		Username: "testuser",
		Password: utils.HashPassword("testpassword"), // 哈希后的密码
	}

	if storedUser.Username != username {
		return "", errors.New("用户不存在")
	}

	if storedUser.Password != utils.HashPassword(password) {
		return "", errors.New("密码错误")
	}

	// 从配置文件中获取 JWT 配置
	secret := "your-secret-key" // 实际应用中应从配置中读取
	expire := 86400             // 实际应用中应从配置中读取

	// 生成 JWT Token
	token, err := utils.GenerateJWT(username, secret, expire)
	if err != nil {
		return "", err
	}

	return token, nil
}

// Register 用户注册
func Register(username, password string) error {
	//校验用户名是否合法
	if err := utils.ValidateUsername(username); err != nil {
		return err
	}

	// 检查用户名是否存在
	existingUser, err := models.GetUserByUsername(username)
	if err != nil {
		return fmt.Errorf("用户查询失败: %w", err)
	}
	if existingUser != nil {
		return errors.New("用户名已存在")
	}

	// 创建带哈希密码的用户
	newUser := models.GinUser{
		Username: username,
		Password: utils.HashPassword(password),
	}

	// 这里应该将新用户保存到数据库
	fmt.Printf("新用户注册: %+v\n", newUser)
	// 持久化到数据库
	if err := models.DB.Select("Username", "Password").Create(&newUser).Error; err != nil {
		return fmt.Errorf("用户创建失败: %w", err)
	}

	return nil
}
